{
  //1. 类型别名
  let sum: number = 100;
  //为 number 设置一个别名, 创建一个新类型
  type n = number;
  let sum2: n = 200;

  interface User{
    name: string;
    age: number;
  }

  type Users = User[];

  let ours: Users = [
    {
      name: '张三',
      age: 18
    },
    {
      name: '李四',
      age: 28
    }
  ];

  //2. 获取某个变量的类型. 这里的 typeof 不是 JS 中的 typeof
  type sumType = typeof sum;

  //3. 获取接口所有键名的联合类型
  interface Car{
    brand: string;
    color: string;
    price: number;
  }

  type attr = keyof Car;// attr = 'brand' | 'color' | 'price'

  let str: attr = 'color';

  //4. 获取函数返回值的类型
  function test(a: number, b: object): number{
    return 20;
  }
  type fnType = typeof test;

  type retType = ReturnType<typeof test>;

  //5. 获取函数参数的类型
  type paramsType = Parameters<typeof test>;

}

{
  //变量类型的声明
  //使用 axios
  axios.get('http://api.xiaohigh.com/heros');
  axios.post('http://api.xiaohigh.com/heros');
  //
}

{
  //内置对象支持 Date  Math
  // let b: Boolean = true;
  // let b2: boolean = true;
  // let str: String = 'xxx';
  let d: Date = new Date();

  //BOM 与 DOM 也支持
  window.onresize = function(){

  }

}